\chapter{创建机械装置}

用于创建和编辑机械装置。

\section{模型名称}

设置机械装置的模型名称。

\section{机械装置类型}

设置机械装置类型。目前支持创建的类型包括：机器人，工具，设备和外轴。

\section{基坐标系}

设置机械装置的基坐标系。基坐标系用于描述机械装置的本地坐标系原点。基坐标系默认与基座的本地坐标系重合。
如果修改了基座，会自动将新设置的基座的位姿设置为基坐标系的位姿。

\section{运动学构型}

运动学构型表示机器人关节的运动方式和排列方式。

创建机器人时需要设置运动学构型。目前支持两种运动学构型：RRRRRR构型和RRRRRR\_P构型。

RRRRRR构型表示械臂有6个主动关节，每关节的类型都是旋转关节，6个关节的旋转轴的方向分别为（0, 0,
1），（0, 1, 0），（0, 1, 0），（1, 0, 0），（0, 1, 0），（1, 0, 0）。RRRRRR构型为标准构型。

RRRRRR\_P构型的机器人是在标准构型的基础上对第三个主动关节做了修改。在RRRRRR\_P构型中，第三个主动关节
的旋转轴与第二个主动关节的旋转轴重合，与标准构型的第三个主动关节对应的关节变成了从动关节。

RRRRRR和RRRRRR\_P构型的机器人运动学计算相同，只不过RRRRRR\_P构型计算的得到的第三个关节的位置是与
RRRRRR构型的第三个主动关节对应的关节的位置。在RRRRRR\_P构型的机器人中，使用OldJ3表示与RRRRRR构型的第
三个主动关节对应的关节，使用J3表示第三个主动关节，J2表示第二个主动关节，它们之间的关系为$OldJ3 = J3
- J2$ 。

\section{连杆}
连杆是机器人的几何结构，由零件和装配体组成。机械装置至少包含两个连杆，并且必须包含一个基座。

基座是机械装置的第一个连杆，是机械装置的支撑结构。

\subsection{添加和编辑连杆}

\subsubsection{连杆名称}

初始化面板时会自动为连杆命名，命名方式为从L\_1向后排序。

\subsubsection{设置为基座}

勾选后将连杆设置为基座。

\subsubsection{选择组件}

在布局或者3D视图中选择零件或者装配体。一个连杆可以包含多个零件或装配体。选择的零件或者装配体需要满足
以下条件：
\begin{itemize}
    \item 没有处于安装状态
    \item 没有被智能组件使用
    \item 没有被其他装配体使用
    \item 没有被其他连杆使用
    \item 不在已经选中的组件列表中
\end{itemize}

\subsection{删除连杆}

删除选中的连杆，如果连杆已经被关节使用或者是坐标系的父连杆，则不允许删除。

\subsection{设置为基座}

将选中的连杆设置为基座。该菜单只有在已经创建的连杆中没有基座时可点击。

\section{关节}

关节将相邻的两个连杆连接在一起，并赋予连杆运动能力。这两个连杆分别为父连杆和子连杆。

根据驱动形式可把关节分为主动关节和从动关节：
\begin{itemize}
    \item 主动关节：有电机，液压或气动装置直接驱动的关节。
    \item 从动关节：依赖于主动关节的运动而被动运动的关节。
\end{itemize}

根据运动方式可把关节分为旋转关节和滑动关节：
\begin{itemize}
    \item 旋转关节：绕关节轴在设置的范围内转动
    \item 滑动关节：沿关节轴在设置的范围内移动
\end{itemize}

\subsection{添加和编辑关节}

\subsubsection{关节名称}

初始化面板时会自动为关节命名，命名方式为从J\_1向后排序。

\subsubsection{设置为主动关节}

勾选后需要设置关节的索引，对于RRRRRR构型和RRRRRR\_P构型的机器人，主动关节的索引值范围为1-6。从动关节
不需要在面板设置索引。

设置为标准构型的J3：只有创建PPPPPP\_P构型的机器人时需要设置。

\subsubsection{父连杆和子连杆}

设置关节的父连杆和子连杆，需要满足以下条件：
\begin{itemize}
    \item 第一个关节的父连杆必须为基座
    \item 父连杆和子连杆不能选择同一个连杆
    \item 不同的关节不能包含相同的子连杆
    \item 基座不能作为关节的子连杆
    \item 不能出现闭环（该条件在编译机器人时检查）
\end{itemize}

\subsubsection{关节类型}

设置关节为旋转关节还是滑动关节。

\subsubsection{设置关节轴}

可通过两点法或者点和方向法创建关节轴。

使用两点法创建时两个点的中点为关节轴的位置，第一点指向第二点的
向量为关节轴的方向。

使用点和方向法创建时点的位置为关节轴的位置，方向为关节轴的方向。

关节轴的位置和方向都是相对于基坐标系的。

\subsubsection{反转关节轴方向}

将关节轴的方向取反。

\subsubsection{创建反向关节}
创建关节轴方向与标准配置的机器人(ABB)对应的关节轴方向相反的关节。

\subsubsection{名义零点}
关节的名义初始位置，表示与标准配置的机器人(ABB)对应的关节的零点与实际零点的偏差。

\subsubsection{点动轴}

通过拖动滑块预览子连杆的运动是否符合预期。

\subsubsection{关节限制}

设置关节的运动范围。对于机器人，关节的最小限制不能小于-720度，最大限制不能大于720度。关节下限要小于
关节上限。

\subsection{删除关节}

删除选中的关节。只能最后删除父连杆为基座的关节。

\section{腕坐标系}
当创建机械装置的类型为机器人时，会出现腕坐标系。腕坐标系为必需项。

腕坐标系是机器人用于安装工具的的坐标系，一般位于机器人的末端。目前只支持为机器人创建一个腕坐标系。

腕坐标系的位姿表示机器人默认TCP（工具中心点）相对于机器人的基坐标系的位置和方向。

\subsection{添加和编辑腕坐标系}

\subsubsection{腕坐标系名称}

创建腕坐标系时默认名称为tool0。

\subsubsection{属于连杆}

选择把腕坐标系创建在哪个连杆上，腕坐标系会随着该连杆的父关节运动。只能选择关节的子连杆。

\subsubsection{位置和方向}

设置腕坐标相对于基坐标系的位姿。

\subsection{删除腕坐标系}

删除选中的腕坐标系。

\section{工具数据}
当创建机械装置的类型为工具时，会出现工具数据。工具数据为必需项。

工具数据包括工具坐标系，质量，重心和惯性矩。

工具坐标系的位姿表示TCP（工具中心点）相对于工具的基坐标系的位置和方向。

可以创建多个工具数据。

\subsection{添加/编辑工具数据}

\subsubsection{工具数据名称}

初始化面板时会自动命名，命名方式为从Tooldata\_1向后排列。

\subsubsection{位置和方向}

设置工具坐标相对于工具基坐标系的位姿。可以通过已经创建的目标点和坐标系获取位姿。

\subsubsection{负载数据}

设置工具的质量，重心和惯性矩。

\subsection{删除工具数据}

删除选中的工具数据。

\section{设备坐标系}

当创建机械装置的类型为设备时，会出现设备坐标系。设备坐标系为可选项。

设备坐标系是设备用于安装其他物体的坐标系。

设备坐标系的位姿是相对于设备基坐标系的。

可以创建多个设备坐标系。

\subsection{添加和编辑设备坐标系}

\subsubsection{设备坐标系名称}

初始化面板时会自动命名，命名方式为从DeviceFrame\_1向后排列。

\subsubsection{属于连杆}

选择把设备坐标系创建在哪个连杆上，如果连杆有父关节设备坐标系会随着父关节运动。设备坐标系可以创建在子
连杆和基座上。

\subsubsection{位置和方向}

设置设备坐标系相对于基坐标系的位姿。

\subsection{删除设备坐标系}

删除选中的设备坐标系。

\section{装载坐标系}

当创建机械装置的类型为外轴时，会出现装载坐标系。装载坐标系为必需项。

装载坐标系是外轴用于安装其他物体的坐标系。

装载坐标系的位姿是相对于外轴基坐标系的。

可以创建多个装载坐标系。

\subsection{添加和编辑装载坐标系}

\subsubsection{装载坐标系名称}

初始化面板时会自动命名，命名方式为从MountingFrame\_1向后排列。

\subsubsection{属于连杆}

选择把装载坐标系创建在哪个连杆上，装载坐标系会随着连杆的父关节运动。装载坐标系只允许创建在
子连杆上。

\subsubsection{位置和方向}

设置装载坐标系相对于外轴基坐标系的位姿。

\subsection{删除装载坐标系}

删除选中的装载坐标系。

\section{依赖性}

依赖性指一个关节的运动依赖于其他关节。依赖性是单向的，不能出现相互依赖的情况。创建依赖性至少需要两个
关节，即从属关节和主导关节。

创建依赖性的方式有两种：通过系数创建和通过公式创建。
\begin{itemize}
    \item 通过系数创建：系数为一个固定的值，表示从属关节移动的位移或旋转角度相对于主导关节的倍数。
    \item 通过公式创建：使用数学公式确定从属关节相对于主导关节的运动关系，这种方式可以定义从属关节和
    多个主导关节之间更为复杂的运动关系，而不只是简单的倍数关系。
\end{itemize}

\subsection{添加和编辑依赖性}

\subsubsection{关节}

设置从属关节。只能为一个关节创建一个依赖性。

\subsubsection{主导关节}

设置主导关节。主导关节和从属关节不能相同。

\subsubsection{使用系数}

通过设置系数创建依赖性，系数不能为0。

\subsubsection{使用公式}

通过公式创建依赖性。在公式中使用主导关节的名称表示关节的位移或转角，例如：\\
$atan2(125 * sin(J\_2), 694 + (125 * cos(J\_3))) + 2 * J\_4$

公式中不能包含除了数字，空格，主导关节名称和运算符之外的字符，否则创建的依赖性是无效的。公式支持的运
算符包括：
\begin{enumerate}
    \item 基本运算符：+, -, *, /
    \item 三角函数：
    \begin{itemize}
        \item sin(x)：正弦函数，返回角度x的正弦值。
        \item cos(x)：余弦函数，返回角度x的余弦值。
        \item tan(x)：正切函数，返回角度x的正切值。
    \end{itemize}
    \item 反三角函数:
    \begin{itemize}
        \item asin(x)：反正弦函数，返回x的反正弦值。
        \item acos(x)：反余弦函数，返回x的反余弦值。
        \item atan(x)：反正切函数，返回x的反正切值。
        \item atan2(x, y)：反正切函数，返回由坐标（x，y）确定的点的极角。
    \end{itemize}
    \item 双曲函数：
    \begin{itemize}
        \item sinh(x)：双曲正弦函数，返回x的双曲正弦值。
        \item cosh(x)：双曲余弦函数，返回x的双曲余弦值。
        \item tanh(x)：双曲正切函数，返回x的双曲正切值。
    \end{itemize}
    \item 反双曲函数：
    \begin{itemize}
        \item asinh(x)：反双曲正弦函数，返回x的反双曲正弦值。
        \item acosh(x)：反双曲余弦函数，返回x的反双曲余弦值。
        \item atanh(x)：反双曲正切函数，返回x的反双曲正切值。
    \end{itemize}
    \item 对数函数：
    \begin{itemize}
        \item log2(x)：以 2 为底的对数函数。
        \item log10(x)：以 10 为底的对数函数。
        \item log(x)或ln(x)：自然对数函数，以e为底。
    \end{itemize}
    \item 指数和平方根函数：
    \begin{itemize}
        \item exp(x)：指数函数，返回e的x次幂。
        \item sqrt(x)：平方根函数，返回x的平方根。
    \end{itemize}
    \item 其他函数：
    \begin{itemize}
        \item sign(x)：返回x的符号。
        \item rint(x)：返回最接近x的整数值。
    \end{itemize}
    \item 聚合函数：
    \begin{itemize}
        \item sum(x1, x2, ..., xn)：返回参数的总和。
        \item avg(x1, x2, ..., xn)：返回参数的平均值。
        \item min(x1, x2, ..., xn)：返回参数中的最小值。
        \item max(x1, x2, ..., xn)：返回参数中的最大值。
    \end{itemize}
\end{enumerate}

\section{编译机械装置}

生成机械装置。该过程会做以下检查，如果不符合创建条件则禁止创建机械装置：

\begin{enumerate}
    \item 连杆使用的零件和装配体检查：
    \begin{itemize}
        \item 没有处于安装状态
        \item 没有被其他装配体和智能组件使用
        \item 没有被删除
    \end{itemize}
    \item 运动学构型检查
    \begin{itemize}
        \item 主动关节的索引应该是连续的
        \item 关节没有形成闭环
        \item 对于RRRRRR\_P构型的机器人，需要定义标准构型的J3
        \item 有6个主动关节并且都是旋转关节
        \item 关节旋转轴的方向符合RRRRRR构型规定
    \end{itemize}
\end{enumerate}

\section{关闭面板}

关闭面板，取消创建或修改。

修改模式下，如果连杆使用的零件和装配体不符合创建条件，继续关闭面板将不会还原原始的机械装置。
